// express搭建服务器
// 导入配置信息
let { port } = require('./config');
const express = require('express');
const app = express();
app.listen(port, () => console.log(`
  恭喜服务器启动成功!!!
  请求地址:
  http://127.0.0.1:${port}
` ))

// 设置跨域资源共享
app.use(require('cors')());
// 解析post请求携带的数据
app.use(express.urlencoded({ extends: false }));
app.use(express.json());
// 上传图片文件托管
app.use(express.static('./uploads'))


// 导入数据库连接
require('./db/connect.js');
// 导入路由
app.use(require('./routers'));

// 导入异常处理中间件及404中间件
let { errHandler, notFound } = require('./middleware/err404')
// 错误处理中间件
app.use(errHandler);
// 404中间件
app.use(notFound);



/*
  api接口服务器的配置
    - 第三方模块
      + express  服务器搭建
      + cors     跨域资源共享
      + mongoose 操作mongoDB数据库
      + jsonwebtoken  token的创建及校验
      + bcryptjs  数据加密
      + multer   文件上传
      + moment   时间格式化
      + nodemailer  发送邮件
    - 目录配置
      + node_modules   自动创建(存储第三方模块)
      + utils          工具文件夹
        - reg.js       正则校验方法
      + log            日志目录
        - err.log      错误日志
      + routers        路由文件夹
        - index.js     总路由表
        - 多个路由文件
          + 注意: 路由表文件中不写任何的处理函数代码
            - 路由中的处理函数由 中间件,控制器组成
              + 中间件函数在middleware中
              + 控制器处理函数则在 控制器文件夹中
            - 路由表中只需要导入使用即可
      + middleware     自定义中间件
        - 多个中间件文件
      + controllers    控制器文件夹
        - 多个路由请求控制器
          + 本项目中的控制器,本质上就是一个个路由的请求处理方法
      + model          模型文件夹
        - 不同表的操作方法文件
        - 比如: user.js  书写所有用到的用户表操作方法
      + db             数据库连接/Schema表及表模型创建
        - connect.js   连接数据文件
        - 多个表模型文件
      + config         项目配置文件夹
        - index.js     所有项目中的配置详细
          + 包含: port 端口, salt token的盐, level 加密等级 ,正则表达式.....
*/
/*
  API接口服务器
    - 按照MVC架构模式
    - MVC是后端常见的一种架构模式
      + M: Model 模型
        - 所有请求的数据库相关的操作都通过模型完成
      + V: View 视图
        - 所有请求的页面视图的展示,都是通过View完成
      + C: Controller 控制器
        - 所有请求的逻辑代码都在控制器中完成
          + 控制器中会使用模型完成数据操作
          + 控制器中也会使用视图完成页面展示操作
    - API接口
      + 接口: 一般都是响应数据的
      + 所以API接口服务器中没有视图(没有页面)
        - 所有页面给前端完成(页面布局,样式,页面中请求发起,数据渲染)
      + 也就是说API接口服务器中只有 Model 及 Controller
*/